package com.ydgg.ltar.controller;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;





import com.alibaba.fastjson.JSON;
import com.ydgg.ltar.model.Admin;
import com.ydgg.ltar.model.AdminRoles;
import com.ydgg.ltar.util.PageInfo;
import com.ydgg.ltar.util.Result;
import com.ydgg.ltar.util.StringUtils;

/**
 * 管理员管理
 * 作者： 张叶
 * 创建时间：2018年5月16日  下午4:22:49
 */
@Controller
@RequestMapping("admin/admin")
public class AdminController extends BaseController{


	
	/*
	 * 页面
	 */
	@RequestMapping(value="toRegister")
	public String toRegister(){
		return "registerCompany";
	}
	
	
	/**
	 * 列表
	 * 作者：张叶
	 * 时间：2016年9月7日 下午4:22:17
	 */
	@RequestMapping("adminList")
	public String adminList() {
		return "admin/admin/adminList";
	}
 
	
	/**
	 * 分页显示 
	 * 作者：张叶
	 * 时间：2016年9月7日 上午11:58:15
	 */
	@ResponseBody
	@RequestMapping("adminJson")
	public JSON adminJson(PageInfo pageInfo, Integer rows, Integer page,
			String sidx, String sord, Model model, String aName,
			String aUserName) {
		// 分页信息
		if (pageInfo == null) {
			pageInfo = new PageInfo();
		}
		if (pageInfo.getPage() < 2
				|| pageInfo.getPage() >= pageInfo.getTotalPage()) {
			pageInfo.setCount(0);
		}
		if (rows != null) {// 每页显示条数
			pageInfo.setPageSize(rows);
		}
		if (page != null) {// 当前页
			pageInfo.setPage(page);
		}

		// 排序
		String order = " order by created_at desc";
		if (sidx != null && sidx != "") {// 排序字段
			order = " order by " + sidx + " ";
			if (sord != null && sord != "") {// 排序
				order += sord;
			}
		}

		// 搜索条件
		String where = "1 = 1";
		if (aName != null && !"".equals(aName)) {
			where += " and realname like '%" + aName + "%'";
		}
		if (aUserName != null && !"".equals(aUserName)) {
			where += " and (telphone like '%" + aUserName + "%' or username like '%" + aUserName + "%')";
		}
		where += " and id != 1";
		List<Map<String, Object>> list = adminService.selectByPage(pageInfo,where, order);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		for (int i = 0; i < list.size(); i++) {
			Date createTime = (Date) list.get(i).get("created_at");
			list.get(i).put("created_at", sdf.format(createTime));
		}
		Map<String, Object> data = new HashMap<String, Object>();
		data.put("total", pageInfo.getTotalPage());
		data.put("list", list);
		return (JSON) JSON.toJSON(data);
	}

	
	/**
	 * 修改记录，返回页面
	 * 
	 * @author 张叶
	 * @version 创建时间：2016年7月12日 上午9:38:09
	 */
	@RequestMapping("updateAdminPage/{aId}")
	public String updateAdminPage(@PathVariable String aId, Model model) {
		List<AdminRoles> list = adminRolesService.selectAll();
		Admin a = adminService.selectByaId(Long.parseLong(aId));
		model.addAttribute("a", a);
		model.addAttribute("list", list);
		return "admin/admin/updateAdmin";
	}

	
	/**
	 * 编辑记录
	 * 
	 * @author 张叶
	 * @version 创建时间：2016年7月9日 下午5:35:18 
	 * 注意事项： 
	 * 1、修改角色之后， 要对应修改admin_user_roles表
	 * 2、手机号要判断重复
	 */
	@ResponseBody
	@RequestMapping(value = "updateAdmin", method = RequestMethod.POST)
	public Result updateAdmin(Admin a,String endtime) {
		Result result = new Result();
		Admin myself = adminService.selectByaId(a.getId());
		Admin admin = adminService.getCurrent();
		if (admin != null) {// 当前登录人不为空
			if (myself != null) {// 查找有修改记录
				String where = " and username = '" + a.getUsername() + "'";
				where += " and id != " + a.getId();
				List<Admin> list = adminService.selectWhere(where);
				if (list.size() == 0) {// 用户名不重复
					int flag = 0;// 是否修改角色
					myself.setRealname(a.getRealname());
					if (a.getRoleid() != null && !"".equals(a.getRoleid())) {// 修改角色
						myself.setRoleid(a.getRoleid());
						flag = 1;
					}
					myself.setTelphone(a.getTelphone());
					if (a.getPassword() != null && !"".equals(a.getPassword())) {// 密码为空时，不修改
						myself.setPassword(DigestUtils.md5Hex(a.getPassword()));
					}
					try{
						int i = adminService.updateAdmin(myself, flag);
						if (i > 0) {
							result.code = 0;
							result.message = "修改成功";
						} else {
							result.code = 1;
							result.message = "系统错误，修改失败";
						}
					}catch(Exception e){
						result.code = 5;
						result.message = "用户名或手机号重复，添加失败";
					}
				} else {
					result.code = 3;
					result.message = "用户名重复，请重新输入";
				}
			} else {
				result.code = 2;
				result.message = "此条记录不存在，可能被删除";
			}
		} else {
			result.code = 4;
			result.message = "当前登录人为空，请刷新后重试";
		}
		return result;
	}

	
	/**
	 * 添加按钮，跳转到添加页面 
	 * 作者：张叶 
	 * 时间：2016年9月7日 上午11:59:36
	 */
	@RequestMapping("addAdmin")
	public String addAdmin(Model model) {
		List<AdminRoles> list = adminRolesService.selectAll();
		model.addAttribute("list", list);
		//将公司集合存入model
		return "admin/admin/addAdmin";
	}

	
	/**
	 * 添加操作 
	 * 作者：张叶
	 * 时间：2016年9月7日 下午12:00:10
	 */
	@ResponseBody
	@RequestMapping("insertAdmin")
	public String insertAdmin(Admin a,String endtime) {
		String where = " and username = '" + a.getUsername() + "'";
		List<Admin> list = adminService.selectWhere(where);
		if (list.size() == 0) {// 用户名不重复
			a.setPassword(DigestUtils.md5Hex(a.getPassword()));
		}
		int i = adminService.insertAdminAndAur(a);// 添加管理员同时添加aur，将两者合并为一个事务
		if (i > 0) {
			return "0";
		} else {
			return "1";
		}
	}
	
	
	/**
	 * 用户名判重
	 * @author 张叶
	 * @version 创建时间：2016年7月11日 下午4:22:09
	 */
	@ResponseBody
	@RequestMapping("isExists")
	public boolean isExists(String username,String id){
		String where = " and (telphone = '" + username + "' or  username = '" + username + "')";
		if(id != null && !"".equals(id)){
			where += " and ID != " + id;
		}
		List<Admin> list = adminService.selectWhere(where);
		if (list.size() > 0) {// 用户名不重复
			return false;
		}else{
			return true;	
		}
	}
	
	
	/**
	 * 手机号判重
	 * 作者： 张叶
	 * 创建时间：2018年6月1日  上午10:07:13
	 */
	@ResponseBody
	@RequestMapping("isTelphone")
	public boolean isTelphone(String telphone,String id){
		String where = " and (telphone = '" + telphone + "' or  username = '" + telphone + "')";
		if(id != null && !"".equals(id)){
			where += " and ID != " + id;
		}
		List<Admin> list = adminService.selectWhere(where);
		if (list.size() > 0) {// 用户名不重复
			return false;
		}else{
			return true;	
		}
	}
	@ResponseBody
	@RequestMapping("isuserName")
	public boolean isuserName(String userName,String id){
		String where = " and (telphone = '" + userName + "' or  username = '" + userName + "')";
		if(id != null && !"".equals(id)){
			where += " and ID != " + id;
		}
		List<Admin> list = adminService.selectWhere(where);
		if (list.size() > 0) {// 用户名不重复
			return false;
		}else{
			return true;	
		}
	}
	
	
	/**
	 * 管理员删除
	 * @author 张叶
	 * @version 创建时间：2016年7月9日 下午4:47:55
	 */
	@ResponseBody
	@RequestMapping("delAdmin")
	public String delAdmin(String aId){
		String msg = "";
		if(StringUtils.objectToInt(aId, -1) != -1){
			Admin a = adminService.selectByaId(Long.parseLong(aId));
			if(a != null){
				int i = adminService.delAdminAndAur(Long.parseLong(aId));//删除管理员同时删除aur中的记录，两者合并为一个事务
				if(i > 0){
					msg = "0";
				}else{
					msg = "1";
				}
			}else{
				msg = "2";
			}
		}
		return msg;
	}
	
	
	/**
	 * 查看个人资料
	 * 作者： 张叶
	 * 创建时间：2018年5月29日  下午4:15:50
	 */
	@RequestMapping("/adminInfo/{id}")
	public String adminInfo(@PathVariable("id") Long id,Model model){
		Admin admin = adminService.selectByaId(id);
		if(admin != null){
			model.addAttribute("admin",admin);	
			AdminRoles roles = adminRolesService.findById((long)(admin.getRoleid()));
			model.addAttribute("roles",roles);
		}
		return "admin/admin/adminInfo";
	}
	
	/**
	 * 修改个人信息
	 * 作者：张叶
	 * 时间：2016年9月7日 下午4:09:34
	 */
	@RequestMapping("updateInfo/{aId}")
	public String updateInfo(@PathVariable Integer aId,Model model){
		if(aId != null && !"".equals(aId)){
			Admin a = adminService.selectByaId(aId.longValue());
			if(a != null){
				model.addAttribute("a",a);	
			}
		}
		return "admin/admin/updateInfo";
	}
	
	
	/**
	 * 列表
	 * 作者： 张叶
	 * 创建时间：2018年5月25日  下午2:17:26
	 */
	@ResponseBody
	@RequestMapping("/listAdmin")
	public List<Admin> listAdmin(HttpSession session){
		Admin a = (Admin)session.getAttribute("currentUser");
		List<Admin> list = new ArrayList<Admin>();
		if(a.getRemark() != null && !"".equals(a.getRemark())){
			list = adminService.selectAll();	
		}else{
			list = adminService.selectWhere(" and id = " + a.getId());
		}
		return list;
	}

}
